package com.vhall.component.plugin.common.annotation;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;

/**
 * redisLock注解
 *
 * @author skeleton
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisSpinLock {

    @AliasFor("value")
    String redisKey() default "";

    @AliasFor("redisKey")
    String value() default "";

    /**
     * 统一前缀
     *
     * @return
     */
    String prefix() default "";

    /**
     * 加锁失败后是否重试
     *
     * @return
     */
    boolean retry() default false;

    /**
     * 加锁失败后最长重试时间(毫秒)，默认5000
     *
     * @return
     */
    int retryTimeout() default 5000;

    /**
     * 加锁成功后，key过期时间(毫秒),默认5000
     *
     * @return
     */
    int expireTime() default 5000;

    /**
     * 获取锁失败后，线程等待时长，默认50毫秒
     *
     * @return
     */
    int sleepTime() default 50;

}
